\mysection{Testen}
\label{real:sec:testen}
Um die Implementierung des Konzeptes zu testen, haben wir uns für Unit-Tests mit
dem JUnit-Framework entschieden. Dadurch können wir die Funktionalität unseres
Benachrichtigungssystems unabhängig von \masp testen. Etwaige Fehler in der
Integration bzw. Verwendung unseres Benachrichtigungssystems durch \masp werden
so umgangen, da unsere Tests erst "`hinter"' \masp beginnen sollen.
\\
Um dies zu erreichen, simulieren die Testfälle andere Anwendungen, die
Nachrichtenkategorien registrieren, Benutzer, die persönliche Dringlichkeiten
speichern sowie die \notStrat, um Entscheidungen über Präsentationsart und
Ausgabegeräte zu erfragen. Die Tests rufen damit also immer die \notSys-Klasse
auf, die der einzige Einstiegspunkt in unser Benachrichtigungssystem ist.
\\
Für das Registrieren von Nachrichtenkategorien und das Speichern von
Benutzerdringlichkeiten benötigt es keiner weiteren Vorbedingungen. Für das
Testen der Ermittlung einer Präsentationsart sollte es bereits registrierte
Nachrichtenkategorien und Benutzerdringlichkeiten geben. Zudem ist es für das
Ermitteln von Ausgabegeräten erforderlich, dass ein Kontextmodell zur Verfügung
steht. Dieses Kontextmodell müssen wir selbst erstellen, da die Tests unabhängig
von einer laufenden \masp-Instanz funktionieren müssen, die selbst ein
Kontextmodell erstellen würde. Um das Kontextmodell selbst zu erstellen,
bedienen wir uns jedoch einiger Hilfsmethoden aus \masp. Diese Methoden werden
hauptsächlich von der \textit{ContextFactory} bereitgestellt. Dadurch können wir
bereits ein \textit{Environment} erstellen, welches als Basis-Klasse des
Kontextmodells dient. Zudem bietet die \textit{ContextFactory} Methoden zum
Erstellen von Räumen und Geräten an. Mit Hilfe des \textit{Environment}s können
wir zudem eine \ctxCon erstellen. Diese bringt uns weitere Hilfsmethoden, z.B.
das Erstellen eines Benutzers und wird zudem bei der Entscheidung über
Ausgabegeräte benötigt(s. \ref{real:subsubsec:devicedecider}). In der
startUp-Methode der Test-Suite, also die Methode, die vor jedem Testfall
aufgerufen wird, erstellen wir nun ein neues Kontextmodell. Damit die Testfälle
Zugriff darauf haben, speichern wir dieses in globalen Variablen und fügen
dem Kontextmodell einen Raum und einen Benutzer hinzu. Letzterer bekommt
natürlich auch eine Position und eine Blickrichtung zugeordnet. Die verschiedenen Geräte
werden hier noch nicht erstellt, da es viele verschiedene Gerätesituationen
gibt, die getestet werden müssen. Beispiele für solche Situation sind, dass kein
Bildschirm im gesamten Sichtbereich des Benutzers liegt oder es gibt mehrere
Lautsprecher und zudem Bildschirme im peripheren, aber nicht im zentralen
Sichtbereich des Benutzers. Zu Beginn der Testfälle werden dann mehrere Geräte
so zum Kontextmodell hinzugefügt, dass die für den Testfall notwendige Situation
entsteht. Diese Erstellung von Situationen passiert dabei in eigenständigen
Methoden, um verschiedene Situationen wiederverwenden und kombinieren zu können.
\\
In der startUp-Methode werden zudem einige globale Variablen instanziiert, z.B.
die Zeitpunktnamen- und Dringlichkeits-\textit{Map}s, die für das Registrieren
einer Nachrichtenkategorie benötigt werden.
\\
Das Registrieren von Nachrichtenkategorien und das Speichern von
Benutzerdringlichkeiten wird zuerst getestet. Dies dient dazu, dass in den
späteren Tests bereits Nachrichtenkategorien und Benutzerdringlichkeiten
existieren.
\\
Zum Abschluss eines Testfalls werden in der tearDown-Methode einige globalen
Variablen auf \textit{null} gesetzt, die erst in den Testfällen instanziiert
werden. Dazu gehören die Variablen für die Geräte, die beim Erstellen der
Gerätesituation die kleinste Entfernung zum Benutzer haben. Dabei gibt es je
eine Variable für den nächsten Bildschirm im peripheren Sichtbereich, den
nächsten Bildschirm im zentralen Sichtbereich und den nächsten Lautsprecher.
Diese Variablen werden in den entsprechenden Testfällen benötigt, um zu
Vergleichen, ob die Ausgabegeräte, die vom Benachrichtigungssystem bestimmt
wurden, auch den erwarteten Geräten entsprechen.